//
//  AanbiedingViewController.m
//  iCinema
//
//  Created by Robin Daniels on 08/11/12.
//  Copyright (c) 2012 Robin Daniels. All rights reserved.
//

#import "AanbiedingViewController.h"
#import "FilmDetailViewController.h"
#import "Film.h"
#import "JSONKit.h"
#import "VariableStore.h"

@interface AanbiedingViewController ()

@end

@implementation AanbiedingViewController

@synthesize movieList;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization

    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view.
    
    //Achtergrond afbeelding instellen
    UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"bg.jpg"]];
    self.view.backgroundColor = background;
    
	NSString* searchURL = [NSString stringWithFormat:@"http://%@:8080/MyCinemaWebservice/webresources/REST/film/aanbiedingen", [[VariableStore sharedInstance] global_ip]];
	
    //Declaratie variabelen.
	NSError* error = nil;
	NSURLResponse* response = nil;
	NSMutableURLRequest* request = [[NSMutableURLRequest alloc] init];
	
	NSURL* URL = [NSURL URLWithString:searchURL];
	[request setURL:URL];
	[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
	[request setTimeoutInterval:30];
	
    //Webservice aanspreken, krijgen JSON terug.
	NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
	
    if (error)
	{
        //HTTP Response geeft error terug, error afhandeling.
		NSLog(@"Error performing request %@", searchURL);
		//return 0;
	} else {
        //JSONstring maken met het resultaat van de webservice call
        NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        
        //JSONstring omzetten naar NSDictionary, gemakkelijk om objecten uit te halen.
        NSDictionary *results = [jsonString objectFromJSONString];
        
        movieList = [[NSMutableArray alloc] init];
        
        //Elke film in de resultatenDictionary aflopen
        for (NSDictionary *movie in results) {
            Film *film = [[Film alloc] init];
            
            //Film gegevens uit de dictionary in een Film object steken.
            film.Film_ID = [movie objectForKey:@"Film_ID"];
            film.Titel = [movie objectForKey:@"Titel"];
            film.Jaar = [movie objectForKey:@"Jaar"];
            film.Looptijd = [movie objectForKey:@"Looptijd"];
            film.KorteInhoud = [movie objectForKey:@"KorteInhoud"];
            film.Afbeelding = [movie objectForKey:@"Afbeelding"];
            film.Studio = [movie objectForKey:@"Studio"];
            film.Genre1 = [movie objectForKey:@"Genre1"];
            film.Genre2 = [movie objectForKey:@"Genre2"];
            film.Stream_url = [movie objectForKey:@"Stream_url"];
            film.Prijs = [movie objectForKey:@"Prijs"];
            film.KortingPercentage = [movie objectForKey:@"KortingPercentage"];
            
            //Film object toevoegen aan de Mutable Array
            [movieList addObject:film];
        }        
    }
}

- (void) viewWillAppear:(BOOL)animated {
    
    if ([[VariableStore sharedInstance]  came_from_AanbiedingView] == NO && [[VariableStore sharedInstance]  detail_back_buttonPressed] == YES) {
        // Detail back button is pressed maar 'Aanbiedingen' was niet het vorige scherm -> Geen titel trigger
    } else {
        // In alle andere gevallen wel
        self.parentViewController.title = @"Aanbiedingen";
    }
    
    // Backbutton waarde resetten
    [[VariableStore sharedInstance] setDetail_back_buttonPressed:NO];
    
}

//Aantal rijen in de Table View teruggeven
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [movieList count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    static NSString *SimpleTableIdentifier = @"AanbiedingIdentifier";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
    
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:SimpleTableIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
    }
    
    //Custom cell opmaken met gegevens van Film object.
    Film *film = [movieList objectAtIndex:indexPath.row];	
    cell.textLabel.text = film.Titel;
    
    //Prijzen berekenen
    Float32 prijs = [film.Prijs floatValue];
    Float32 korting = [film.KortingPercentage floatValue];
    Float32 nieuwePrijs = prijs * (1 - korting);
    cell.detailTextLabel.text = [NSString stringWithFormat:@"Nu voor slechts € %.2f!", nieuwePrijs];
    
    //Load images from web asynchronously with GCD
    if(!film.AfbeeldingData){
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:film.Afbeelding]];
        dispatch_sync(dispatch_get_main_queue(), ^{
            film.AfbeeldingData = data;
            UIImage *thumbnail = [UIImage imageWithData:data];
            cell.imageView.image = thumbnail;
        });
    });
    }
    else
    {
        //Placeholder afbeelding vervangen door echte afbeelding.
        cell.imageView.image = [UIImage imageWithData:film.AfbeeldingData];
    }
    
    return cell;
}

//View controller veranderen. We gaan van Aanbiedingen naar Detail view via de Segue.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"showFilmDetail"]) {
        NSIndexPath *indexPath = [self.AanbiedingenTable indexPathForSelectedRow];
        FilmDetailViewController *detail = segue.destinationViewController;
        detail.film = [movieList objectAtIndex:indexPath.row];
    };
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)viewDidUnload {
    [self setAanbiedingenTable:nil];
    [super viewDidUnload];
}
@end
